package com.cmc.cloud.cmclink.doc.service.si;

import com.cmc.cloud.cmclink.doc.entity.BlnoCntrDO;
import com.cmc.cloud.cmclink.doc.entity.BlnoLocalChargeDO;
import com.cmc.cloud.cmclink.doc.entity.CalculateOperateLogDO;
import com.cmc.cloud.cmclink.doc.vo.blnochargevo.BlnoLocalChargeResultVO;
import com.cmc.cloud.cmclink.doc.vo.blnochargevo.BlnoLocalChargeUpdateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnolocalchargevo.*;

import java.util.Collection;
import java.util.List;

/**
 * Local Charge费用 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoLocalChargeService {

    /**
     * 查询提单信息
     *
     * @param reqVo
     * @return
     */
    List<BlnoLocalChargeRespVO> getBlnoInfo(BlnoLocalChargeReqVO reqVo);

    /**
     * local charge 信息查询
     *
     * @param blId     blId
     * @param imExType imExType
     * @return BlnoLocalChargeDetailCntrRespVO
     */
    List<BlnoLocalChargeDetailRespVO> getLocalChargeDetail(Long blId, String imExType);

    /**
     * local charge detail 信息查询
     *
     * @param blId     blId
     * @param imExType imExType
     * @return BlnoLocalChargeDetailCntrRespVO
     */
    List<BlnoLocalChargeDetailCntrRespVO> getLocalChargeDetailWithCntr(Long blId, String imExType);

    /**
     * 日志信息查询
     *
     * @param blNo
     * @param imExType
     * @return
     */
    CalculateOperateLogDO getCalculateLogInfo(String blNo, String imExType);

    /**
     * 箱信息查询
     *
     * @param blId
     * @return
     */
    List<BlnoCntrDO> getBlNoCntrInfo(Long blId);

    /**
     * local charge 计算
     *
     * @param blIds
     * @param imExType
     * @param currentPort
     * @param codeMigration
     * @return 获得Local Charge费用信息
     */
    List<BlnoLocalChargeResultVO> calcauteLocalCharge(Collection<Long> blIds, String imExType, String currentPort, String codeMigration);

    /**
     * 获得Local Charge费用信息
     *
     * @param blnoId 编号
     * @return 获得Local Charge费用信息
     */
    List<BlnoLocalChargeUpdateReqVO> getBlnoChargeByBlnoId(Long blnoId);

    /**
     * 添加复制添加费用
     *
     * @param blnoLocalChargeAddReqVO
     */
    void addLocalCharge(BlnoLocalChargeAddReqVO blnoLocalChargeAddReqVO);

    /**
     * 更新Local Charge费用信息
     *
     * @param blnoLocalChargeDo
     */
    void updateLocalCharge(BlnoLocalChargeDO blnoLocalChargeDo);

    /**
     * 转财务
     *
     * @param blboIds
     * @param imExType
     */
    void toAccount(String imExType, List<Long> blboIds);

    /**
     * 多式联运查询提单信息
     *
     * @param reqVo
     * @return
     */
    List<MultiBlnoLocalChargeRespVO> getMultiBlnoInfo(MultiBlnoLocalChargeReqVO reqVo);
}
